package edu.fyvtc.javaweb.demo.controller;

import edu.fyvtc.javaweb.demo.model.House;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.*;

@Controller
@RequestMapping(value = "/thymeleaf")
public class ThymeleafController {


    //没有ResponseBody注解，SpringBoot会将返回结果交给视图解析器
    //本项目以  thymeleaf  为例
    //本例使用ModelAndView作为返回值
    //根据ModelAndView中的ViewName在resources/templates/目录下寻找对应的.html文件
    //本例中，对应的.html文件为  resources/templates/myMultiView.html
    //ModelAndView中的attribute可以有多个，可以在html中使用，以实现动态调整html的目的
    @RequestMapping("/menu1")
    public ModelAndView htmlPageMultiAttribute() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("myMultiView");
        modelAndView.addObject("name1", "蛮吉");
        modelAndView.addObject("slogan1", "你的对手是：神圣兽国游尾郡窝窝乡独行族妖侠蛮吉。");
        modelAndView.addObject("name2", "海问香");
        modelAndView.addObject("slogan2", "我守这里，谁也别想过去。");
        modelAndView.addObject("name3", "远浪舰长");
        modelAndView.addObject("slogan3", "花痴都是不会这么正经的死去的。");
        return modelAndView;
    }


    //attributeValue可以是简单的字符串，也可以是一个集合
    //本例使用 Set 作为attributeValue
    //html中可以使用each遍历，具体可参考mySetView.html
    @RequestMapping("/menu2")
    public ModelAndView setView() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("mySetView");

        Set<String> set = new HashSet<>();
        set.add("你好");
        set.add("hello");
        set.add("Привет ");
        set.add("Bonjour");
        set.add("こんにちは");
        set.add("안녕하세요");
        set.add("مرحبا");

        modelAndView.addObject("你好", set);
        return modelAndView;
    }


    //attributeValue可以是简单的字符串，也可以是一个集合
    //本例使用 List 作为attributeValue
    //html中可以使用each遍历，具体可参考myListView.html
    @RequestMapping("/menu3")
    public ModelAndView listView() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("myListView");

        List<String> list = new LinkedList<>();
        list.add("你好");
        list.add("hello");
        list.add("Привет");
        list.add("Bonjour");
        list.add("こんにちは");
        list.add("안녕하세요");
        list.add("مرحبا");

        modelAndView.addObject("helloList", list);
        return modelAndView;
    }


    //attributeValue可以是简单的字符串，也可以是一个集合
    //本例使用 Map 作为attributeValue
    //html中可以使用entrySet()方法获取所有的键值对，具体可参考myMapView.html
    @RequestMapping("/menu4")
    public ModelAndView mapView() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("myMapView");

        Map<String, Object> map = new HashMap<>();
        map.put("id", "A001");
        map.put("country", "中国");
        map.put("city", "阜阳");
        map.put("area", 108);

        modelAndView.addObject("房子", map);
        return modelAndView;
    }


    //attributeValue可以是简单的字符串，也可以是一个集合
    //attribute也可以有多个，attributeValue也可以是嵌套的集合
    //具体可参考myMapView.html
    @RequestMapping("/menu5")
    public ModelAndView collectionView() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("myCollectionView");

        List<Map<String, String>> list = new LinkedList<>();
        Map<String, String> map;

        map = new HashMap<>();
        map.put("语言", "汉语");
        map.put("问候语", "你好");
        map.put("告别语", "再见");
        list.add(map);

        map = new HashMap<>();
        map.put("语言", "英语");
        map.put("问候语", "hello");
        map.put("告别语", "Bye");
        list.add(map);


        map = new HashMap<>();
        map.put("语言", "俄语");
        map.put("问候语", "Привет");
        map.put("告别语", "Пока");
        list.add(map);


        map = new HashMap<>();
        map.put("语言", "法语");
        map.put("问候语", "Bonjour");
        map.put("告别语", "Salut");
        list.add(map);

        map = new HashMap<>();
        map.put("语言", "日语");
        map.put("问候语", "こんにちは");
        map.put("告别语", "じゃあね");
        list.add(map);

        map = new HashMap<>();
        map.put("语言", "韩语");
        map.put("问候语", "안녕하세요");
        map.put("告别语", "잘가");
        list.add(map);

        map = new HashMap<>();
        map.put("语言", "阿拉伯语");
        map.put("问候语", "مرحبا");
        map.put("告别语", "ما أساءا لك");
        list.add(map);



        modelAndView.addObject("commonlyList", list);
        modelAndView.addObject("标题", "以下是多种语言的你好");
        return modelAndView;
    }



    //ViewName也可以在templates的子文件夹下，多级目录用  "/"  分隔
    //attributeValue也可以是一个类对象
    //html中可以通过 . [] 等方式获取对象的属性值，具体可参考sub/mySubView.html
    @RequestMapping("/menu6")
    public ModelAndView subPathView() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("sub/mySubView");
        House house = new House();
        house.setId("A0001");
        house.setCountry("中国");
        house.setCity("阜阳");
        house.setArea(108.5);
        modelAndView.addObject("房子", house);
        return modelAndView;
    }

}